#pragma once

#include "noncopyable.h"

class InetAddress;

//套接字设置
class Socket
{
public:
    Socket(int sockfd)
        : sockfd_(sockfd)
    {
    }

    ~Socket();

    int fd() const { return sockfd_; }

    void bindAddress(const InetAddress &localaddr);
    void listen();
    int accept(InetAddress *peeraddr);

    void shutdownWrite();

    // 禁用Nagle算法
    void setTcpNoDelay(bool on);

    // 设置端口复用，要在 想要被复用的端口 绑定之前调用。于对TCP套接字处于TIME_WAIT状态下的socket允许重新绑定
    void setReuseAddr(bool on);
    // 网络连接分配负载均衡。
    void setReusePort(bool on);
    // 启用保活机制
    void setKeepAlive(bool on);

    void Close(); 
private:
    int sockfd_;
};
